define(['moment','jqplot-bar', 'jqplot-pointLabels'], function (moment) {
    return ['$scope', '$rootScope', '$mdDialog', 'MMWService', '$filter', '$stateParams', '$timeout', 'config', '$calculater',
        function ($scope, $rootScope, $mdDialog, $MMWService, $filter, $stateParams, $timeout, config, $calculater) {
            
            $scope.init = function(){
                $scope.loading_time = moment().format('YYYY-MM-DD HH:mm:ss');
                $scope.getMonthData();
            };
            
            $scope.back = function(){
                $rootScope.changeProgram('menu', {}, true);
            };

            // 更新
            $scope.upDate = function(){
                if($scope.m_type)
                {
                    getBarChartData();
                    if($scope.r_type)
                    {
                        getProductData();
                    }
                }
            };

            // 取得 當(上)月資料
            $scope.getMonthData = function(){
                $scope.nowState = 'Month';
                $scope.m_type = 'M';
                getBarChartData();
                if($scope.product_data && $scope.product_data.length > 0){
                    $scope.tab = '';
                    $scope.product_data = [];
                    $scope.item_list = [];
                }
            };

            // 取得 當(上)周資料
            $scope.getWeekData = function(){
                $scope.nowState = 'Week';
                $scope.m_type = 'W';
                getBarChartData();
                if($scope.product_data && $scope.product_data.length > 0){
                    $scope.tab = '';
                    $scope.product_data = [];
                    $scope.item_list = [];
                }
            };

            // 更換頁籤資料 (計件、計時、其他)
            $scope.changeTab = function(tab){
                if($scope.product_data && $scope.product_data.length > 0)
                {
                    $scope.tab = tab;
                    $scope.item_list = $filter('filter')($scope.product_data, {project_type: tab});
                }
            };

            // 工價資料開窗
            $scope.openWageData = function(item){
                var content = {
                    condition: {
                        d_type: "2", // 0: 圖表 ; 1: 生產資訊 ; 2: 工價資訊
                        m_type: $scope.m_type, // M: 月 ; W: 周 
                        r_type: $scope.r_type, // 0: 上月(上周) ; 1: 當月(當周)
                        c_type: $scope.tab, // Q: 計件 ; T: 計時 ; O:其他
                        product_no: item.product_no // 產品編號
                    }
                };
                personnelPriceReportInfoGet(content, function(data){
                    if(data && data.data.length > 0)
                    {
                        var wageData = data.data;
                        $mdDialog.dialog(
                            'module/moduleMobileOPM/program/mobileOPM01/mobileOPM01_wageData.tmp.html',
                            function(dialog){
                                return {
                                    item_list: wageData, 
                                    back: function () {
                                        dialog.hide();
                                    },
                                }
                            }
                        );
                    }
                    else
                        $scope.$root.showAlert($filter('translate')('common.msg.no_data'));
                });
            };

            // 取得人員工價所有相關資料
            function personnelPriceReportInfoGet(content, callback){
                $MMWService.sendToServer({
                    uri : 'ServicesSTD.Module_OPM.personnel_price_report_info_get',
                    content : content,
                    success : function(data){
                        if(callback)
                            callback(data);
                    }
                });
            };

            // 取得長條圖資料
            function getBarChartData(){
                var last = '';
                var current = '';
                if($scope.m_type == 'M')
                {
                    last = $filter('translate')('mobileOPM01.last_month'); // 上月
                    current = $filter('translate')('mobileOPM01.month'); // 上月
                }
                else
                {
                    last = $filter('translate')('mobileOPM01.last_week'); // 上周
                    current = $filter('translate')('mobileOPM01.week'); // 上周
                };

                var content = {
                    condition: {
                        d_type: "0", // 0: 圖表 ; 1: 生產資訊 ; 2: 工價資訊
                        m_type: $scope.m_type, // M: 月 ; W: 周 
                    }
                };

                personnelPriceReportInfoGet(content, function(data){
                    if(data && data.data.length > 0)
                    {
                        var barChartData = data.data;
                        barChart({
                            // 第一筆資料代表上月(周)，第二筆資料代表當月(周)
                            timing: [barChartData[0].time_money, barChartData[1].time_money],
                            piece: [barChartData[0].pcs_money, barChartData[1].pcs_money],
                            other: [barChartData[0].other_money, barChartData[1].other_money],
                            last: last,
                            current: current
                        });
                    }
                    else
                        $scope.$root.showAlert($filter('translate')('common.msg.no_data'));
                });
            };

            // jqplot 長條圖
            function barChart(options){
                $('#barChart').empty(); // 為了避免重疊，每呼叫一次長條圖要先刪除當下的長條圖後，再產生出新的長條圖
                $('#barChart').css('min-width', '100%').css('min-height', '70%');
                $.jqplot('barChart', [options.piece, options.timing, options.other], {  
                    stackSeries: true,
                    captureRightClick: true,
                    seriesDefaults:{
                        renderer:$.jqplot.BarRenderer,
                        rendererOptions: {
                            highlightMouseDown: true,  
                            barWidth: 70,
                        },
                        pointLabels: {
                            show: true,
                            hideZeros: true
                        },
                    },
                    seriesColors:["#1ab7cd", "#ea9114", "#cecece"],
                    grid: { 
                        backgroundColor: '#ffffff', 
                        shadow: false
                    },
                    axes: {
                        //X軸
                        xaxis: {
                            renderer: $.jqplot.CategoryAxisRenderer,
                            ticks: [options.last, options.current],
                            tickOptions:{ fontSize:'16px' }
                        },
                        //Y軸
                        yaxis: {
                            pad: 0,
                            tickOptions:{ formatString: '%d', fontSize:'16px' }
                        }
                    }   
                }); 

                // jqplot click events
                $('#barChart').bind('jqplotDataClick',
                function (ev, seriesIndex, pointIndex, data) {
                    if(pointIndex === 0)
                    {
                        $scope.r_type = '0'; // 上月(周)
                        getProductData();
                    } else 
                    {
                        $scope.r_type = '1'; // 當月(周)
                        getProductData();
                    };
                });

                // jqplot xaxis-tick events
                $('.jqplot-xaxis-tick')
                .css({ cursor: "pointer", zIndex: "1" })
                .click(function (e) { 
                    if(e.target.innerText == options.last)
                    {
                        $scope.r_type = '0'; // 上月(周)
                        getProductData();
                    }
                    else
                    {
                        $scope.r_type = '1'; // 當月(周)
                        getProductData();
                    };
                });
            };

            // 取得生產資訊資料
            function getProductData(){
                var content = {
                    condition: {
                        d_type: "1", // 0: 圖表 ; 1: 生產資訊 ; 2: 工價資訊
                        m_type: $scope.m_type, // M: 月 ; W: 周 
                        r_type: $scope.r_type // 0: 上月(上周) ; 1: 當月(當周)
                    }
                };
                personnelPriceReportInfoGet(content, function(data){
                    if(data && data.data.length > 0)
                    {
                        $scope.tab = 'Q';
                        $scope.product_data = data.data;
                        $scope.item_list = $filter('filter')($scope.product_data, {project_type: 'Q'});
                    }
                    else
                    {
                        $scope.tab = '';
                        $scope.item_list = [];
                        $scope.$root.showAlert($filter('translate')('common.msg.no_data'));
                    };
                });
            };

        }
    ];
});
